package com.study.mr.combiner;


import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * 以WordCount为例：
 * 自定义Mapper类，继承hadoop提供的Mapper，并且根据具体业务指定输入数据和输出数据类型
 *
 * 输入数据类型：
 * KEYIN    读取文件中的偏移量   数字（LongWritable）
 * VALUEIN  读取文件的一行数据   文本（Text）
 *
 * 输出数据类型：
 * KEYOUT   输出数据key的类型    就是一个单词（Text）
 * VALUEOUT 输出数据value的类型  给单词的标记  数字1（IntWritable）
 *
 */

public class WordCountMapper extends Mapper<LongWritable,Text,Text,IntWritable>{
    private Text outk=new Text();
    private IntWritable outv=new IntWritable(1);

    /**
     * Map阶段核心业务处理方法，每输入一行数据调用一次map方法
     * @param key     输入数据的key
     * @param value   输出数据的value
     * @param context 上下文对象
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //1.获取当前输入的数据
        String line = value.toString();
        //2.切割数据
        String[] datas = line.split(" ");
        //3.遍历集合 封装 输出数据的key和value
        for (String data : datas) {
            outk.set(data);
            context.write(outk,outv);
        }
    }
}
